﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Projeto3D.Scenes;

namespace Projeto3D.Scenes
{
    class Level:SceneBase
    {

        Player player;
        Camera3D camera;
        Pontos pontos;
        Random random;
        Objeto2D background;

        int quantidadeInimigos;
        
        
        public Level()
            : base()
        {
            Game1.self.Window.Title = "Baka";
        }

        public override void start()
        {
            background = new Objeto2D(Game1.self.Content.Load<Texture2D>("fundo"));
            background.posicao.X = 512;
            background.posicao.Y = 384;
            
            player = new Player(Game1.self.Content.Load<Model>("player"));

            InimigoManager.modeloInimigos = Game1.self.Content.Load<Model>("inimigo");

            pontos = new Pontos();

            TiroManagem.Initialize(Game1.self.Content.Load<Model>("player"));
            
            camera = new Camera3D();

            random = new Random();

            

            //quantidadeInimigos = 4;
            InimigoManager.criarInimigo(quantidadeInimigos);
            
        }

        public override void terminate()
        {
            camera = null;
            player = null;
        }

        public override void update(Microsoft.Xna.Framework.GameTime gameTime)
        {
         


            if (Player.Self.posicao.X >= 32.7f)
            {
                Player.Self.posicao.X = 32.7f;
            }
            else if (Player.Self.posicao.X <= -32.7f)
            {
                Player.Self.posicao.X = -32.7f;
            }
            if (Player.Self.posicao.Z <= -19.3f)
            {
                Player.Self.posicao.Z = -19.3f;
            }
            else if (Player.Self.posicao.Z >= +19.3f)
            {
                Player.Self.posicao.Z = +19.3f;
            }





            TiroManagem.Update(gameTime);
                        
            for (int t = 0; t < TiroManagem.listaTiro.Count; t++)
            {
                Tiro umTiro = TiroManagem.listaTiro[t];
                
                for (int i = 0; i < InimigoManager.listaInimigos.Count; i++)
                {
                    
                    Inimigo inimigoUm = InimigoManager.listaInimigos[i];

                    if (umTiro.hitTestObject(inimigoUm))
                    {
                        if (umTiro.visible == true)                        
                        TiroManagem.listaTiro.Remove(umTiro);
                        pontos.GanharPontos(5);
                        InimigoManager.listaInimigos.Remove(inimigoUm);
                    }

                }
                    
            }
            
            InimigoManager.Update(gameTime);

            if (InimigoManager.listaInimigos.Count == 0)
            {
                quantidadeInimigos++;
                InimigoManager.criarInimigo(quantidadeInimigos);
            }

            for (int t = 0; t < InimigoManager.listaInimigos.Count; t++)
            {
                Inimigo inimigoUm = InimigoManager.listaInimigos[t];
                if (inimigoUm.hitTestObject(player))
                {
                    player.TomandoDano();
                }
            }
            
            player.Update(gameTime);

            if (player.vida == 0)
            {
                SceneManager.setScene(new GameOver());
            }

            for (int t = 0; t < TiroManagem.listaTiro.Count; t++)
            {
                Tiro tiroLento = TiroManagem.listaTiro[t];

                for (int u = 0; u < InimigoManager.listaInimigos.Count; u++)
                {
                    Inimigo inimigoLento = InimigoManager.listaInimigos[u];
                    
                    if (Keyboard.GetState().IsKeyDown(Keys.Space))
                    {
                        player.cameraLenta = true;
                        inimigoLento.cameraLenta = true;
                        tiroLento.cameraLenta = true;
                    }

                    else if (Keyboard.GetState().IsKeyUp(Keys.Space))
                    {
                        if (player != null)
                        {
                            player.cameraLenta = false;
                            inimigoLento.cameraLenta = false;
                            tiroLento.cameraLenta = false;
                        }
                    }
                }
            }
            //camera.lookAt = player.posicao;
            //camera.position = player.posicao + new Vector3(0, 50, 5);
        }

        

        public override void draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch)
        {
            spriteBatch.End();
            spriteBatch.Begin();
            background.Draw(spriteBatch);
            pontos.Draw(spriteBatch);
            spriteBatch.End();
            spriteBatch.Begin();

            player.Draw(camera);
            TiroManagem.Draw(camera);
            InimigoManager.Draw(camera);

            
            
        }
    }
}


